/**
 * 是否邮箱
 */
function isEmail(email) {
  return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(
    email
  );
}

/**
 * 是否手机号码
 */
function isMobile(rule, value, callback) {
  if (value == "" || value == undefined || value == null) {
    callback();
  } else {
    // 正则失败false，取反true抛出异常
    if (!/^1[0-9]{10}$/.test(value)) {
      // 抛出异常，验证规则有错
      callback(new Error("请输入正确的手机号码"));
    } else {
      callback();
    }
  }
}

/**
 * 是否电话号码
 */
function isPhone(rule, value, callback) {
  if (value == "" || value == undefined || value == null) {
    callback();
  } else {
    // 正则失败false，取反true抛出异常
    if (!/^([0-9]{3,4}-)?[0-9]{7,8}$/.test(value)) {
      // 抛出异常，验证规则有错
      callback(new Error("请输入正确的电话号码"));
    } else {
      callback();
    }
  }
}

/**
 * 是否身份证号码
 */
function isIdNumber(rule, value, callback) {
  if (value == "" || value == undefined || value == null) {
    callback();
  } else {
    // 正则失败false，取反true抛出异常
    if (!/^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[Xx\d]$/.test(value)) {
      // 抛出异常，验证规则有错
      callback(new Error("请输入正确的身份证号码"));
    } else {
      callback();
    }
  }
}

/**
 * 是否车牌号码
 */
function isLicenseNumber(licenseNumber) {
  return /(^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$)/.test(
    licenseNumber
  );
}

/**
 * 是否是正整数
 */
function isPositiveInteger(number) {
  return /^[1-9]\d*$/.test(number);
}

/**
 * 是否是网址
 */
function isWebsite(website) {
  return /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|ink|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/.test(
    website
  );
}

/**
 * 是否字符串
 */
function isString(string) {
  return Object.prototype.toString.call(string).slice(8, -1) === "String";
}

/**
 * 是否数字
 */
function isNumber(number) {
  return Object.prototype.toString.call(number).slice(8, -1) === "Number";
}

/**
 * 是否boolean
 */
function isBoolean(boolean) {
  return Object.prototype.toString.call(boolean).slice(8, -1) === "Boolean";
}

/**
 * 是否null
 */
function isNull(Null) {
  return Object.prototype.toString.call(Null).slice(8, -1) === "Null";
}

/**
 * 是否undefined
 */
function isUndefined(Undefined) {
  return Object.prototype.toString.call(Undefined).slice(8, -1) === "Undefined";
}

export default {
  isEmail,
  isMobile,
  isPhone,
  isIdNumber,
  isLicenseNumber,
  isPositiveInteger,
  isWebsite,
  isString,
  isNumber,
  isBoolean,
  isNull,
  isUndefined,
};
